package com.xjrsoft.module.customerTwo.ycode.t_ycode_product.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.xjrsoft.core.tool.utils.StringUtil;
import com.xjrsoft.module.customerTwo.ycode.t_ycode_product.entity.TYcodeProduct;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.xjrsoft.core.tool.utils.CollectionUtil;
import java.util.ArrayList;
import com.xjrsoft.module.customerTwo.ycode.t_ycode_product.entity.TYcodeProductDetail;
import com.xjrsoft.module.customerTwo.ycode.t_ycode_product.service.ITYcodeProductDetailService;
import com.xjrsoft.module.customerTwo.ycode.t_ycode_product.dto.TYcodeProductListDto;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.xjrsoft.common.page.ConventPage;
import com.xjrsoft.common.page.PageOutput;
import java.util.List;
import java.util.Map;

import com.xjrsoft.module.customerTwo.ycode.t_ycode_product.mapper.TYcodeProductMapper;
import com.xjrsoft.module.customerTwo.ycode.t_ycode_product.service.ITYcodeProductService;
import com.xjrsoft.core.mp.base.BaseService;
import com.xjrsoft.core.tool.utils.Func;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.metadata.IPage;

/**
 *  服务实现类
 *
 * @author dongxinhang
 * @since 2024-07-22
 */
@Service
@AllArgsConstructor
public class TYcodeProductServiceImpl extends BaseService<TYcodeProductMapper, TYcodeProduct> implements ITYcodeProductService {

	private ITYcodeProductDetailService tYcodeProductDetailService;

	@Override
	public IPage<TYcodeProduct> getPageList(TYcodeProductListDto pageListDto) {
		Wrapper<TYcodeProduct> wrapper = Wrappers.<TYcodeProduct>query().lambda()
				.eq(!StringUtil.isEmpty(pageListDto.getClass_id()), TYcodeProduct::getClassId, pageListDto.getClass_id())
				.eq(!StringUtil.isEmpty(pageListDto.getMerchant_id()), TYcodeProduct::getMerchantId, pageListDto.getMerchant_id())
				.like(!StringUtil.isEmpty(pageListDto.getClass_complete_code()), TYcodeProduct::getClassCompleteCode, pageListDto.getClass_complete_code())
				.like(!StringUtil.isEmpty(pageListDto.getFirmName()), TYcodeProduct::getFirmName, pageListDto.getFirmName())
				.like(!StringUtil.isEmpty(pageListDto.getName()), TYcodeProduct::getName, pageListDto.getName())
				.eq(!StringUtil.isEmpty(pageListDto.getStatus()), TYcodeProduct::getStatus, pageListDto.getStatus());
		return this.page(ConventPage.getPage(pageListDto), wrapper);
	}

	@Override
	public boolean addTYcodeProduct(TYcodeProduct tYcodeProduct, List<TYcodeProductDetail> tYcodeProductDetailList) {
		String tYcodeProductId = IdWorker.get32UUID();
		tYcodeProduct.setId(tYcodeProductId);
		tYcodeProductDetailList.forEach(tYcodeProductDetail -> tYcodeProductDetail.setProductId(tYcodeProductId));
		tYcodeProductDetailService.saveBatch(tYcodeProductDetailList);
		boolean isSuccess = this.save(tYcodeProduct);
		return isSuccess;
	}

	@Override
	public boolean updateTYcodeProduct(String id, TYcodeProduct tYcodeProduct, List<TYcodeProductDetail> tYcodeProductDetailList) {
		tYcodeProduct.setId(id);
		// TYcodeProductDetail
		List<String> tYcodeProductDetailIdList = new ArrayList<>();
		for (TYcodeProductDetail tYcodeProductDetail : tYcodeProductDetailList) {
			String tYcodeProductDetailId = tYcodeProductDetail.getId();
			if (StringUtil.isEmpty(tYcodeProductDetailId)) {
				tYcodeProductDetail.setProductId(id);
			} else {
				tYcodeProductDetailIdList.add(tYcodeProductDetailId);
			}
		}
		if (CollectionUtil.isNotEmpty(tYcodeProductDetailIdList)) {
			tYcodeProductDetailService.remove(Wrappers.<TYcodeProductDetail>query().lambda()
					.notIn(TYcodeProductDetail::getId, tYcodeProductDetailIdList)
					.eq(TYcodeProductDetail::getProductId, id));
		}
		tYcodeProductDetailService.saveOrUpdateBatch(tYcodeProductDetailList);
		return this.updateById(tYcodeProduct);
	}

	public boolean delete(String ids) {
		List<String> idList = Func.toStrList(ids);
		if (this.removeByIds(idList)) {
			tYcodeProductDetailService.remove(Wrappers.<TYcodeProductDetail>query().lambda().in(TYcodeProductDetail::getProductId, ids));
			return true;
		}
		return false;
	}

	@Override
	public List<Map> getFirmName(String classId,String classCode) {
		return this.getBaseMapper().getFirmName(classId,classCode);
	}

	@Override
	public IPage<TYcodeProduct> getCollectPageList(TYcodeProductListDto pageListDto) {
		QueryWrapper<TYcodeProduct> queryWrapper = new QueryWrapper<>();
		queryWrapper.in("id",pageListDto.getProductIdList());
		return this.page(ConventPage.getPage(pageListDto), queryWrapper);
	}

	public List<TYcodeProductDetail> getTYcodeProductDetailByParentId(String parentId){
		Wrapper wrapper = Wrappers.<TYcodeProductDetail>query().lambda().eq(TYcodeProductDetail::getProductId, parentId).orderByAsc(TYcodeProductDetail::getOrderNum);
		return tYcodeProductDetailService.list(wrapper);
	}
}